/*
 * ParametroMetodoBase.java
 * Copyright 2010 Universidad Francisco de Paula Santander (UFPS).
 * Todos los Derechos Reservados.
 * Creado el 30/11/2010, 11:15:16 AM
 */

package com.ufps.cuatro.util.base;

import java.io.Serializable;

/**
 * <i><b>ParametroMetodoBase:</b></i><p>Esta Clase es la base para la creación de los
 * parametros de los Métodos de los Controles Swing registrados en el Archivo
 * de Configuración que Permitirá Generar las Vistas que se utilizarán en los
 * Modelos Analizados (*.jar).</p>
 * <p>Se debe tener en cuenta que esta Clase hace parte del Paquete Base el  cual
 * solo se encarga de cargar los archivos de configuraciones (Properties) y no en
 * las Representaciones utilizadas en los Modelos.</p>
 * <p>Esta clase al igual que todas las
 * que pertenecen a este paquete solo contienen información que estará 
 * disponible para las demas clases que implementan estas configuraciones</p>
 *
 * @author Carlos A. Torres C. - Dolly E. Guerrero. <https://code.google.com/p/tesis4dor/>
 * @version 1.0 30/11/2010 
 * @see Serializable
 * @see Cloneable
 * @see Comparable
 */
public class ParametroMetodoBase implements Serializable, Cloneable, Comparable{
    private static final long serialVersionUID = -7398961527201641234L;

    /**
     * Indice de definición en el Archivo de Propiedades.
     */
    protected int id;
    /**
     * Cadena de definición del Tipo de Dato que representa el Parametro.
     */
    protected String classpath;    
    /**
     * Estado que indica si el Tipo devuelto por el Parametro es un primitivo.
     */
    protected boolean primitive;
    /**
     * Estado que indica si el Tipo devuelto es un array.
     */
    protected boolean array;   
    
    private MetodoBase objMetodoBase;    

    /**
     * Constructor por Defecto.
     */
    public ParametroMetodoBase() {
    }
    
    /**
     * Constructor utilizado en la Implementación.
     * @param id Indice de definición en el Archivo de Propiedades.
     * @param classpath Cadena de definición del Tipo de Dato que representa el Parametro.
     * @param array Estado que indica si el Tipo devuelto es un array.
     * @param primitive Estado que indica si el Tipo devuelto por el Parametro es un primitivo.
     */
    public ParametroMetodoBase(int id, String classpath, boolean primitive, boolean array) {
        this.id = id;
        this.classpath = classpath;
        this.primitive = primitive;
        this.array = array;            
    }

    /**
     * Constructor utilizado en la Implementación.
     * @param id Indice de definición en el Archivo de Propiedades.
     * @param objMetodoBase Referencia al Método Padre.
     * @param classpath Cadena de definición del Tipo de Dato que representa el Parametro.
     * @param array Estado que indica si el Tipo devuelto es un array.
     * @param primitive Estado que indica si el Tipo devuelto por el Parametro es un primitivo.
     */
    public ParametroMetodoBase(int id, String classpath, boolean primitive, boolean array, MetodoBase objMetodoBase) {
        this.id = id;
        this.classpath = classpath;
        this.primitive = primitive;
        this.array = array;    
        this.objMetodoBase = objMetodoBase;
    }    

    /**
     * Devuelve el Estado que indica si el Tipo devuelto es un array.
     * @return Estado que indica si el Tipo devuelto es un array.
     */
    public boolean isArray() {
        return array;
    }

    /**
     * Devuelve la Cadena de definición del Tipo de Dato que representa el Parametro.
     * @return Cadena de definición del Tipo de Dato que representa el Parametro.
     */
    public String getClasspath() {
        return classpath;
    }

    /**
     * Devuelve el Indice de definición en el Archivo de Propiedades.
     * @return Indice de definición en el Archivo de Propiedades.
     */
    public int getId() {
        return id;
    }    

    /**
     * Devuelve el Estado que indica si el Tipo devuelto por el Parametro es un primitivo.
     * @return Estado que indica si el Tipo devuelto por el Parametro es un primitivo.
     */
    public boolean isPrimitive() {
        return primitive;
    }       

    /**
     * Establece el Estado que indica si el Tipo devuelto es un array.
     * @param array Estado que indica si el Tipo devuelto es un array.
     */
    public void setArray(boolean array) {
        this.array = array;
    }

    /**
     * Establece el Cadena de definición del Tipo de Dato que representa el Parametro.
     * @param classpath Cadena de definición del Tipo de Dato que representa el Parametro.
     */
    public void setClasspath(String classpath) {
        this.classpath = classpath;
    }

    /**
     * Establece el Indice de definición en el Archivo de Propiedades.
     * @param id Indice de definición en el Archivo de Propiedades.
     */
    public void setId(int id) {
        this.id = id;
    }    

    /**
     * Establece el Estado que indica si el Tipo devuelto por el Parametro es un primitivo.
     * @param primitive Estado que indica si el Tipo devuelto por el Parametro es un primitivo.
     */
    public void setPrimitive(boolean primitive) {
        this.primitive = primitive;
    }    

    @Override
    public String toString() {
        return classpath;
    }

    @Override
    public int compareTo(Object o) {
        try{
            ParametroMetodoBase obj = (ParametroMetodoBase) o;
            if(this.id > obj.id)
                return 1;
            else if(this.id < obj.id)
                return -1;
            else
                return 0;
        }catch(java.lang.Exception ex){}
        return 0;
    }    

    /**
     * Devuelve el Método al cual pertenece el Parametro.
     * @return Método al cual pertenece el Parametro.
     */
    public MetodoBase getObjMetodoBase() {
        return objMetodoBase;
    }

    /**
     * Establece el Método al cual pertenece el Parametro.
     * @param objMetodo Método al cual pertenece el Parametro.
     */
    public void setObjMetodoBase(MetodoBase objMetodo) {
        this.objMetodoBase = objMetodo;
    }    
}
